from django.test import TestCase

# Create your tests here.
from django.test import TestCase, tag
from rest_framework.test import APITestCase
# Create your tests here.
from .models import *
import random


class ProductTest(APITestCase):

    def setUp(self):
        # 创建假数据，准备测试环境
        new_cate = Category.objects.create(title="新的分类")

        self.mock_data = [] # 保存的是存在的数据
        for i in range(3):
            self.mock_data.append(
                Product.objects.create(title=f"新的标题{i} {random.randint(1,10)}",
                                       category=new_cate,
                                       price=Decimal("600"),
                                       gender=2,
                                       type=1)
            )
            pass

    def test_detail(self):
        """
        测试商品详情的API
        :return:
        """

        for obj in self.mock_data:  # 遍历数据库中数据

            # 1. 接口访问正常
            url = f"/store/product/{obj.id}/"  # obj.id 存在的商品id
            response = self.client.get(url)
            self.assertEqual(response.status_code, 200, "详情页API访问失败")  # 输入错正确的id，响应404
            # 404 url 没有设置，或者设置错了。 检查路由

            # 2. 接口返回内容正确
            content = response.data  # 接口返回内容
            content_str = str(response.data)
            key_list = [
                obj.get_gender_display(), # 1. 性别
                obj.get_type_display(), # 2. 类型
                obj.category.title, # 3. 分类
                obj.title, # 5. 标题
                obj.price,  # 5. 价格
                obj.sales_price,  # 5. 价格
                # 5. 其他。。。。
            ]

            for k in key_list:

                # if not str(k) in content_str:
                #     print("内容不正确，测试失败")  # 如果你要表现测试失败，请手机用断言
                self.assertTrue(str(k) in content_str, f'{k} not in content_str')
